﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Kaskelot.SP.Core;
using Kaskelot.SP.Model.Client.Forms;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientFunktionExtensions
	{
		public static ClientFunktion ToClientContract(this Funktion entity)
		{
			ClientFunktion b = new ClientFunktion();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientFunktion ToMinimalClientContract(this Funktion entity)
		{
			ClientFunktion b = new ClientFunktion();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static Funktion ToContract(this ClientFunktion b)
		{
			Funktion entity = new Funktion();

			CopyToEntity(b, entity);

			return entity;
		}

		public static Funktion UpdateContract(this Funktion funktion, FunktionForm form)
		{
			if (funktion.Id == Guid.Empty)
			{
				funktion.Id = Guid.NewGuid();
			}

			funktion.Beskrivning = form.Beskrivning;
			funktion.PublikBeskrivning = form.PublikBeskrivning;
			funktion.Arvode = form.Arvode;
			funktion.FastErsattning = form.FastErsattning;
			funktion.ArkivIntegration = form.ArkivIntegration;
			funktion.LISAIntegration = form.LISAIntegration;

			return funktion;
		}

		private static void CopyFromEntity(Funktion from, ClientFunktion to, bool minimal)
		{
			to.Id = from.Id.ToString();
			to.ValId = from.ValId.ToString();
			to.Beskrivning = from.Beskrivning;
			to.PublikBeskrivning = from.PublikBeskrivning;
			to.Arvode = from.Arvode;
			to.ErsattningsTyp = from.FastErsattning ? "Fast" : "Tim";
			to.ArkivIntegration = from.ArkivIntegration.ToJaNej();
			to.LISAIntegration = from.LISAIntegration.ToJaNej();
		}

		private static void CopyToEntity(ClientFunktion from, Funktion to)
		{
			to.Id = new Guid(from.Id);
			to.ValId = new Guid(from.ValId);
			to.Beskrivning = from.Beskrivning;
			to.PublikBeskrivning = from.PublikBeskrivning;
			to.Arvode = from.Arvode;

			if (from.ErsattningsTyp == "Fast")
				to.FastErsattning = true;
			else
				to.FastErsattning = false;

			to.ArkivIntegration = from.ArkivIntegration.FromJaNej();
			to.LISAIntegration = from.LISAIntegration.FromJaNej();
		}
	}
}
